package ru.susu.algebra.number;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import ru.susu.algebra.operation.IOperation;

/**
 * Поставщик простых чисел, с помощью решета Эратосфена генерирует простые числа в интервале [2..number]
 * и возвращает их в виде массива.
 *
 * @author akargapolov
 * @since: 03.05.2010
 */
public class PrimeNumbersProvider implements IOperation<Integer[]>
{
	/**
	 * @param sources - source[0] целое число number
	 * @return массив простых чисел в интервале [2..number]
	 */
	@Override
	public Integer[] performOperation(Object... sources)
	{
		Integer number = (Integer) sources[0];
		List<Integer> result = new ArrayList<Integer>();
		boolean[] prime = new boolean[number + 1];
		Arrays.fill(prime, true);
		for (int i = 2; i <= number; i++)
			if (prime[i])
			{
				result.add(i);
				for (int j = i + i; j <= number; j += i)
				{
					prime[j] = false;
				}
			}
		return result.toArray(new Integer[result.size()]);
	}

}
